home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / bbbbs85.lha / rexx / bbsNewUsers.rexx < prev    next >
OS/2 REXX Batch file  |  1995-01-25  |  7KB  |  296 lines

  1. /* $VER: bbsNewUsers.rexx 8.4 (25.1.95)
  2. copyright ⌐ 1990-95 Richard Lee Stockton
  3. BBBBS offline New User Validator
  4. FREELY DISTRIBUTABLE
  5. */
  6.  
  7. CALL TIME('R')
  8.  
  9. IF ~SHOW('P','QuickSortPort') THEN CALL setup.rexx()
  10. IF ~SHOW('P','QuickSortPort') THEN EXIT 666
  11.  
  12. title.=''
  13. title.1='BBBBS Users'
  14. title.2='Version 8.4'
  15. title.3='25-Nov-94'
  16.  
  17. ARG name level colorflag maxtime .
  18.  
  19. def=''
  20. pen3=''
  21. IF colorflag=0 THEN
  22.   DO
  23.     def=''
  24.     pen3=''
  25.   END
  26. lineup='1B'x'M'
  27. CR=''
  28. IF ADDRESS()='BAUD' THEN
  29.   DO
  30.     CR='0D'x
  31.     frombb=1
  32.   END
  33. ELSE frombb=0
  34.  
  35. figarg='s:CONFIG.BBS'
  36. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  37. x=OPEN(f,figarg,'R')
  38. IF x=0 THEN
  39.   DO
  40.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'CR
  41.     EXIT
  42.   END
  43. lynes.=''
  44. DO i=1 TO 40
  45.   lynes.i=READLN(f)
  46. END
  47. CALL CLOSE(f)
  48. compos=POS('/*',lynes.1)
  49. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  50. bbsname=STRIP(lynes.1)
  51. sysop=WORD(lynes.2,1)
  52. compos=POS('/*',lynes.3)
  53. IF compos>0 THEN lynes.3=LEFT(lynes.3,compos-1)
  54. bbsdevice=WORD(lynes.4,1)
  55. sysoplevel=WORD(lynes.5,1)
  56. bbspath=WORD(lynes.6,1)
  57. IF ~EXISTS(bbspath) THEN
  58.   DO
  59.     SAY bbspath 'does not exist!'CR
  60.     EXIT
  61.   END
  62. testchar=RIGHT(bbspath,1)
  63. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  64. back=WORD(lynes.40,1)
  65. IF ~DATATYPE(back,'W') THEN back=999999
  66.  
  67. minlev=0
  68. maxlev=99
  69. templist=''
  70. uname=''
  71. newufile=bbspath'Lists/NEW_USERS'
  72. IF EXISTS(newufile) THEN
  73.   DO
  74.     IF getinput(1 1 'Latest New Users Only? (nY) > ')~='N' THEN
  75.       DO
  76.         IF readlines(newufile 1)=0 THEN
  77.           DO i=2 TO lynes.0
  78.             templist=STRIP(templist WORD(lynes.i,3))
  79.           END
  80.       END
  81.     ELSE newufile=''
  82.   END
  83. ELSE newufile=''
  84. IF newufile='' THEN
  85.   DO
  86.     minlev=getinput(1 0 'Minimum level? (0) > ')
  87.     maxlev=getinput(1 0 'Maximum level? (99) > ')
  88.     IF ~DATATYPE(minlev,'W') THEN minlev=0
  89.     IF ~DATATYPE(maxlev,'W') THEN maxlev=99
  90.     IF minlev<0 | minlev>99 THEN minlev=0
  91.     IF maxlev<0 | maxlev>99 THEN maxlev=99
  92.     templist=SHOWDIR(bbspath'Users')
  93.   END
  94. DO levi=1 TO WORDS(templist)
  95.   userfile=bbspath'Users/'WORD(templist,levi)
  96.   IF readlines(userfile 1)=1 THEN ITERATE levi
  97.   lt=WORD(lynes.20,1)
  98.   IF ~DATATYPE(lt,'W') THEN lt=0
  99.   IF lt<minlev | lt>maxlev THEN ITERATE levi
  100.   line=lt WORD(templist,levi)
  101.   SAY line||CR
  102.   IF newufile='' THEN
  103.     IF levi//20=0 THEN
  104.       IF getinput(1 1 pen3'  Q=QUIT   RETURN=CONTINUE 'def)='Q' THEN LEAVE levi
  105.   IF newufile~='' | lt<10 THEN
  106.     DO
  107.       DO levj=1 TO 12
  108.         SAY pen3'  'lynes.levj||def||CR
  109.       END
  110.       SAY pen3'  'lynes.19||def||CR
  111.     END
  112.   ELSE ITERATE levi
  113.   lcom=''
  114.   IF lt<10 THEN lcom='['pen3'A'def']dd  '
  115.   lcom=lcom'['pen3'K'def']ill  ['pen3'R'def']ename  ['pen3'S'def']kip this user?'
  116.   IF lt<10 THEN lcom=lcom' (Akrs) > '
  117.   ELSE lcom=lcom '(krS) > '
  118.   lcom=getinput(1 1 lcom)
  119.   IF lcom='K' THEN
  120.     DO
  121.       IF level>sysoplevel THEN CALL killuser(WORD(templist,levi))
  122.     END
  123.   ELSE IF lcom='R' THEN
  124.     DO
  125.       newname=''
  126.       IF ChangeUserName.rexx(WORD(templist,levi))=0 THEN
  127.         DO
  128.           newname=GETCLIP('BBS_newname')
  129.           CALL SETCLIP('BBS_newname')
  130.         END
  131.       IF newname~='' & newname~=WORD(templist,levi) THEN
  132.         DO
  133.           temp=WORDINDEX(templist,levi+1)
  134.           rtemp=''
  135.           IF temp>0 THEN rtemp=SUBSTR(templist,temp)
  136.           temp=WORDINDEX(templist,levi)
  137.           templist=''
  138.           IF temp>2 THEN templist=STRIP(LEFT(templist,temp-1))
  139.           templist=STRIP(templist newname rtemp)
  140.         END
  141.       levi=levi-1
  142.       CALL SETCLIP('BBS_newname')
  143.     END
  144.   ELSE IF lcom~='S' & lt<10 THEN
  145.     DO
  146.       IF OPEN(f,bbspath'BBS_TEXT/DEF.MEMBER','R')=0 THEN
  147.         SAY 'You need a default member file in BBS_TEXT!  ( BBS_TEXT/DEF.MEMBER )'CR
  148.       ELSE
  149.         DO
  150.           DO lvi=1 TO 22
  151.             line=READLN(f)
  152.             IF lvi=11 THEN lynes.11=line
  153.             IF lvi=20 THEN lynes.20=line
  154.             IF lvi=21 THEN lynes.21=line
  155.           END
  156.           lynes.22=line
  157.           CALL CLOSE(f)
  158.           IF back<999999 THEN
  159.             DO
  160.               SAY CR
  161.               lynes.22=''
  162.               lynes.23=''
  163.               IF DATATYPE(lynes.20,'W') THEN
  164.                 DO
  165.                   SAY 'Setting message counters to last' back 'messages in each conference...'CR
  166.                   DO i=1 TO lynes.20
  167.                     num=countcheck(bbspath'Numbers/LastMessage'i 0)-back
  168.                     IF num<0 | msg.i.0<back THEN num=0
  169.                     lynes.22=lynes.22 num
  170.                     lynes.23=lynes.23 0
  171.                   END
  172.                 END
  173.               ELSE SAY 'Bad default level in BBS_TEXT/DEF.MEMBER file!'CR
  174.               SAY 'Setting file counter to last file uploaded...'CR
  175.               lynes.16=countcheck(bbspath'Numbers/LastFile' 0)
  176.               lynes.16=lynes.16 DATE('S') TIME()
  177.             END
  178.           lynes.0=27
  179.           CALL savelines(userfile)
  180.           SAY lynes.20 WORD(templist,levi) 'has been made a member.'CR
  181.         END
  182.     END
  183.   IF lcom~='K' & newufile~='' THEN
  184.     DO
  185.       nlt=getinput(1 0 lynes.20 'Enter new level or blank for no change. > ')
  186.       IF DATATYPE(nlt,'W') THEN
  187.         DO
  188.           lynes.20=nlt
  189.           CALL savelines(userfile)
  190.         END
  191.       CALL writenew()
  192.     END
  193. END
  194. IF newufile~='' & EXISTS(newufile) THEN
  195.   IF getinput(1 1 'Delete NEW_USERS file? (nY) > ')~='N' THEN
  196.     CALL DELETE(newufile)
  197. IF EXISTS(bbspath'Lists/CBV_USERS') THEN
  198.   IF getinput(1 1 'Delete CBV_USERS file? (nY) > ')~='N' THEN
  199.     CALL DELETE(bbspath'Lists/CBV_USERS')
  200. EXIT
  201.  
  202.  
  203. writenew:
  204. toname=WORD(templist,levi)
  205. IF getinput(1 1 'Write' toname 'an email message? (nY) > ')~='N' THEN
  206.   DO
  207.     replysubj=''
  208.     IF EXISTS(bbspath'BBS_TEXT/EMAIL_WELCOME') THEN
  209.       IF getinput(1 1 'Use default welcome? (nY) > ')~='N' THEN replysubj='|@NEW@|'
  210.     comm=STRIP(name maxtime-TRUNC(TIME('E')) 'MAIL' toname . 0 0 replysubj)
  211.     CALL bbsWrite.rexx(comm)
  212.   END
  213. RETURN
  214.  
  215.  
  216. killuser:
  217. ARG narg
  218. IF STRIP(narg)='' THEN LEAVE loop
  219. CALL bbsKillUser.rexx(narg)
  220. RETURN
  221.  
  222.  
  223. readlines:
  224. CALL CLOSE(f)
  225. PARSE ARG tempname readstart .
  226. IF OPEN(f,tempname,'R')=0 THEN RETURN 1
  227. IF readstart<2 THEN lynes.=''
  228. DO ri=readstart
  229.   line=READLN(f)
  230.   IF EOF(f) THEN BREAK
  231.   lynes.ri=line
  232. END
  233. lynes.0=ri-1
  234. CALL CLOSE(f)
  235. DO ri=lynes.0 TO 0 BY -1 WHILE LENGTH(lynes.ri)=0 | LEFT(UPPER(lynes.ri),2)='/E' | LEFT(UPPER(lynes.ri),2)='/S'
  236. END
  237. lynes.0=ri
  238. RETURN 0
  239.  
  240.  
  241. savelines:
  242. PARSE ARG tempname .
  243. IF OPEN(f,tempname,'W')=0 THEN
  244.   DO
  245.     SAY '***' tempname 'failed to open for saving!'CR
  246.     RETURN 1
  247.   END
  248. DO wi=1 TO lynes.0
  249.   CALL WRITELN(f,lynes.wi)
  250. END
  251. CALL CLOSE(f)
  252. RETURN 0
  253.  
  254.  
  255. countcheck:
  256. PARSE ARG fname' 'cknum .
  257. IF ~EXISTS(fname) THEN
  258.   DO
  259.     IF cknum=0 THEN RETURN 0
  260.     IF OPEN(f,fname,'W')=0 THEN RETURN 0
  261.     CALL WRITELN(f,cknum)
  262.     CALL CLOSE(f)
  263.     RETURN cknum
  264.   END
  265. IF OPEN(f,fname,'R')=0 THEN
  266.   DO
  267.     CALL DELAY(99)
  268.     IF OPEN(f,fname,'R')=0 THEN RETURN cknum
  269.   END
  270. retval=STRIP(READLN(f))
  271. CALL CLOSE(f)
  272. IF ~DATATYPE(retval,'W') THEN retval=0
  273. IF ~DATATYPE(cknum,'W') THEN cknum=0
  274. IF retval<cknum THEN
  275.   DO
  276.     IF OPEN(f,fname,'W')~=0 THEN
  277.       DO
  278.         CALL WRITELN(f,cknum)
  279.         CALL CLOSE(f)
  280.         RETURN cknum
  281.       END
  282.   END
  283. RETURN retval
  284.  
  285.  
  286. getinput:
  287. PARSE ARG upflag' 'oneflag' 'pline
  288. OPTIONS PROMPT pline
  289. PARSE PULL inarg
  290. inarg=STRIP(inarg)
  291. IF upflag THEN inarg=UPPER(inarg)
  292. IF oneflag THEN inarg=LEFT(inarg,1)
  293. RETURN inarg
  294.  
  295. /* bbsNewUsers.rexx */
  296.